Skip to content

feat(proxy): add token-based rate limiting via response parsing#1066

Open
Mossaka wants to merge 8 commits intomainfrom
feat/token-rate-limiting
Open

feat(proxy): add token-based rate limiting via response parsing#1066
Mossaka wants to merge 8 commits intomainfrom
feat/token-rate-limiting

Conversation

@Mossaka
Copy link
Collaborator

@Mossaka Mossaka commented Feb 26, 2026

Summary

  • Token Extractor: PassThrough stream that parses LLM API responses to extract token usage counts
  • TPM Rate Limiting: Tokens-per-minute limit via --rate-limit-tpm <n> (opt-in)
  • Token Metrics: tokens_input_total and tokens_output_total counters in /metrics

Builds on #1038 (observability + rate limiting).

How It Works

proxyRes → TokenExtractor (PassThrough) → res (client)
                   ↓
           emits 'tokens' event → metrics + rate limiter TPM window
  • Non-streaming: buffers JSON, parses usage field
  • Streaming SSE: scans data: lines as they flow through
  • Fail-open: parsing errors emit zero tokens, never block responses
  • Post-response: tokens recorded after response; budget checked on next request

Changes

File Description
token-extractor.js NEW: PassThrough stream (Anthropic + OpenAI, streaming + non-streaming)
server.js Pipe through extractor, record token metrics
rate-limiter.js Add TPM window, recordTokens() method
Dockerfile Add token-extractor.js to COPY
cli.ts Add --rate-limit-tpm flag
types.ts / docker-manager.ts TPM config plumbing

Tests (133 total new + existing)

  • 22 token-extractor unit tests (all 4 response formats + error handling)
  • 6 TPM rate-limiter unit tests
  • 5 token rate-limit integration tests
  • 100 container unit tests pass, 367 TypeScript tests pass

Test plan

  • TypeScript builds, ESLint passes
  • 100 container unit tests pass
  • 367 TypeScript tests pass
  • Integration tests in CI

🤖 Generated with Claude Code

Copilot AI review requested due to automatic review settings February 26, 2026 18:52
@github-actions
Copy link
Contributor

⚠️ Coverage Regression Detected

This PR decreases test coverage. Please add tests to maintain coverage levels.

Overall Coverage

Metric Base PR Delta
Lines 82.01% 82.05% 📈 +0.04%
Statements 81.99% 81.99% ➡️ +0.00%
Functions 82.91% 82.91% ➡️ +0.00%
Branches 74.37% 74.20% 📉 -0.17%
📁 Per-file Coverage Changes (2 files)
File Lines (Before → After) Statements (Before → After)
src/cli.ts 46.3% → 46.1% (-0.22%) 46.8% → 46.4% (-0.35%)
src/docker-manager.ts 83.1% → 83.7% (+0.56%) 82.4% → 83.0% (+0.54%)

Coverage comparison generated by scripts/ci/compare-coverage.ts

@github-actions
Copy link
Contributor

Smoke Test Results

GitHub MCP: Last 2 merged PRs: #1048 test: add CI workflow for non-chroot integration tests, #1063 feat(proxy): make copilot api target configurable for enterprise envi…
Playwright: GitHub page title contains "GitHub"
File Write: /tmp/gh-aw/agent/smoke-test-claude-22456523765.txt created
Bash: File verified via cat

Overall: PASS

💥 [THE END] — Illustrated by Smoke Claude for issue #1066

@github-actions
Copy link
Contributor

Go Build Test Results

Project Download Tests Status
color 1/1 PASS
env 1/1 PASS
uuid 1/1 PASS

Overall: ✅ PASS

Generated by Build Test Go for issue #1066

@github-actions
Copy link
Contributor

C++ Build Test Results

Project CMake Build Status
fmt PASS
json PASS

Overall: PASS

Generated by Build Test C++ for issue #1066

@github-actions
Copy link
Contributor

Bun Build Test Results

Project Install Tests Status
elysia 1/1 PASS
hono 1/1 PASS

Overall: ✅ PASS

Tested with Bun v1.3.10

Generated by Build Test Bun for issue #1066

@github-actions
Copy link
Contributor

🦀 Rust Build Test Results

Project Build Tests Status
fd 1/1 PASS
zoxide 1/1 PASS

Overall: ✅ PASS

Generated by Build Test Rust for issue #1066

@github-actions
Copy link
Contributor

Deno Build Test Results

Project Tests Status
oak 1/1 ✅ PASS
std 1/1 ✅ PASS

Overall: ✅ PASS

Deno version: 2.7.1

Generated by Build Test Deno for issue #1066

@github-actions
Copy link
Contributor

Smoke Test Results — Copilot Engine

Test Status
GitHub MCP (last 2 merged PRs)
Playwright (github.com title check)
File write
Bash verification

Last 2 merged PRs:

Overall: PASS@Mossaka (no assignees)

📰 BREAKING: Report filed by Smoke Copilot for issue #1066

@github-actions
Copy link
Contributor

.NET Build Test Results

Project Restore Build Run Status
hello-world PASS
json-parse PASS

Overall: PASS

Run output

hello-world: Hello, World!

json-parse:

{
  "Name": "AWF Test",
  "Version": 1,
  "Success": true
}
Name: AWF Test, Success: True

Generated by Build Test .NET for issue #1066

@github-actions
Copy link
Contributor

Build Test: Node.js Results

Project Install Tests Status
clsx All passed PASS
execa All passed PASS
p-limit All passed PASS

Overall: PASS

Generated by Build Test Node.js for issue #1066

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds token-usage extraction to the API proxy so it can emit token metrics and enforce an opt-in tokens-per-minute (TPM) rate limit, with CLI/config plumbing and tests.

Changes:

  • Introduces a TokenExtractor Transform stream to parse token usage from OpenAI/Copilot and Anthropic responses (streaming + non-streaming).
  • Extends the proxy rate limiter with a TPM window and a post-response recordTokens() path, plus /metrics token counters.
  • Adds --rate-limit-tpm flag and wires the config through TypeScript → docker-compose env vars, with unit/integration tests.

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
tests/integration/api-proxy-token-ratelimit.test.ts New integration tests around TPM flag plumbing and /health output.
tests/fixtures/awf-runner.ts Adds rateLimitTpm option and forwards --rate-limit-tpm to the CLI.
src/types.ts Extends RateLimitConfig with required tpm field.
src/docker-manager.ts Passes AWF_RATE_LIMIT_TPM into the api-proxy container environment.
src/docker-manager.test.ts Updates env-var passthrough tests to include tpm.
src/cli.ts Adds --rate-limit-tpm, validation, and config building for tpm.
src/cli.test.ts Updates existing rate-limit config expectations to include tpm.
containers/api-proxy/token-extractor.test.js New unit tests for token extraction across formats and encodings.
containers/api-proxy/token-extractor.js New Transform stream to extract token usage from JSON and SSE responses.
containers/api-proxy/server.js Pipes upstream responses through token extractor and records metrics / TPM usage.
containers/api-proxy/rate-limiter.js Adds TPM sliding window + recordTokens() and exposes TPM in status.
containers/api-proxy/Dockerfile Copies token-extractor.js into the api-proxy image.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +88 to +92
if (this._isSSE) {
this._processSSEChunk(chunk);
} else {
this._chunks.push(chunk);
}
Copy link

Copilot AI Feb 26, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In non-SSE mode the extractor buffers every response chunk into this._chunks and then Buffer.concat()s it in _flush(). There’s no maximum size / early abort, so a large non-streaming response can cause unbounded memory growth (and duplicates the streamed data in memory). Consider enforcing a max buffered size (fail-open to ZERO_TOKENS once exceeded) similar to the request MAX_BODY_SIZE in server.js, or only enabling buffering for JSON content-types you intend to parse.

Copilot uses AI. Check for mistakes.
Comment on lines +228 to +231
const isSSE = typeof contentType === 'string' && contentType.includes('text/event-stream');
const enc = (contentEncoding || '').toLowerCase();
const skipExtraction = enc === 'gzip' || enc === 'br' || enc === 'deflate';

Copy link

Copilot AI Feb 26, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Token extraction is skipped for gzip/br/deflate responses. Since the proxy forwards client headers by default (including many clients’ Accept-Encoding), this can make TPM limiting and token metrics effectively no-op in common cases. Consider either stripping/overriding Accept-Encoding upstream (force identity) when TPM is enabled, or adding best-effort decompression for parsing while still passing the original bytes through unchanged.

Copilot uses AI. Check for mistakes.
allowed: false,
limitType: 'tpm',
limit: this.tpm,
remaining: 0,
Copy link

Copilot AI Feb 26, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

check() can now return limitType: 'tpm'. The API proxy’s 429 builder in containers/api-proxy/server.js currently only maps rpm/rph/bytes_pm for the human label and window field, so a TPM rejection will produce a confusing label and an incorrect window value (it will fall through to the bytes-per-minute case). Please update the server-side mapping to include 'tpm' (and a distinct window like per_minute_tokens) so clients can interpret the error correctly.

Suggested change
remaining: 0,
remaining: Math.max(0, this.tpm - tpmCount),

Copilot uses AI. Check for mistakes.
Comment on lines +341 to +345
if (options.rateLimitTpm !== undefined) {
const tpm = parseInt(options.rateLimitTpm, 10);
if (isNaN(tpm) || tpm <= 0) return { error: '--rate-limit-tpm must be a positive integer' };
config.tpm = tpm;
}
Copy link

Copilot AI Feb 26, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

--rate-limit-tpm parsing/validation was added here, but there are no unit tests covering it (no rateLimitTpm cases in src/cli.test.ts). Add tests that: (1) enabling TPM sets config.tpm and enabled=true, and (2) invalid/zero/negative TPM returns the expected error message, to prevent regressions in flag handling.

Copilot uses AI. Check for mistakes.
Comment on lines +4 to +10
* Tests that token-per-minute (TPM) rate limiting works end-to-end with
* actual Docker containers. Uses the --rate-limit-tpm flag to enable
* token-based rate limiting.
*
* Note: These tests require the token-extractor.js module to be present
* in the api-proxy container. If the module is not yet merged, tests
* that depend on actual token extraction from responses will be skipped.
Copy link

Copilot AI Feb 26, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This suite is described as “Token Rate Limiting Integration Tests” and the header note says tests that depend on token extraction will be skipped if the module isn’t merged, but there’s no conditional skip logic here and the current assertions only verify /health output and absence of 429s—not that TPM enforcement triggers based on extracted tokens. Consider either updating the description to match what’s actually tested, or adding an end-to-end assertion that a low TPM limit produces a 429 after a response with known token usage (e.g., via a deterministic mock upstream or a server-level unit test with a mocked extractor).

Suggested change
* Tests that token-per-minute (TPM) rate limiting works end-to-end with
* actual Docker containers. Uses the --rate-limit-tpm flag to enable
* token-based rate limiting.
*
* Note: These tests require the token-extractor.js module to be present
* in the api-proxy container. If the module is not yet merged, tests
* that depend on actual token extraction from responses will be skipped.
* Tests that token-per-minute (TPM) rate limiting wiring works end-to-end with
* actual Docker containers. Uses the --rate-limit-tpm flag to enable
* token-based rate limiting and validates configuration/health output and
* the absence or presence of 429s under specific configurations.
*
* Note: These tests assume the token-extractor.js module is present in the
* api-proxy container when TPM is enabled, but they currently do not assert
* on per-response token extraction behavior directly.

Copilot uses AI. Check for mistakes.
Comment on lines +128 to +133
_processSSEChunk(chunk) {
const text = this._sseLineBuf + chunk.toString('utf8');
const lines = text.split('\n');
// Last element may be incomplete — keep it in the buffer
this._sseLineBuf = lines.pop();

Copy link

Copilot AI Feb 26, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SSE parsing builds text via chunk.toString('utf8') and concatenates into a JS string. If a multi-byte UTF-8 sequence is split across chunks (possible when JSON contains non-ASCII text), toString() can introduce replacement characters and make the JSON invalid, causing token extraction to fail. Consider using StringDecoder('utf8') to safely decode chunk boundaries in streaming mode.

Copilot uses AI. Check for mistakes.
@github-actions
Copy link
Contributor

test: add CI workflow for non-chroot integration tests ✅
feat(proxy): make copilot api target configurable for enterprise envi… ✅
feat(proxy): add token-based rate limiting via response parsing ✅
feat(proxy): make Copilot API target configurable for enterprise environments ✅
Playwright ✅
Tavily search ❌
File write + cat ✅
Build (npm ci && npm run build) ✅
Overall status: FAIL

🔮 The oracle has spoken through Smoke Codex for issue #1066

@github-actions
Copy link
Contributor

Chroot Version Comparison Results

Runtime Host Version Chroot Version Match?
Python Python 3.12.12 Python 3.12.3 ❌ NO
Node.js v24.13.1 v20.20.0 ❌ NO
Go go1.22.12 go1.22.12 ✅ YES

Result: FAIL — Python and Node.js versions differ between host and chroot environments.

Tested by Smoke Chroot for issue #1066

@github-actions
Copy link
Contributor

Java Build Test Results ☕

Project Compile Tests Status
gson 1/1 PASS
caffeine 1/1 PASS

Overall: PASS

All Java projects compiled and tests passed successfully via the AWF proxy (172.30.0.10:3128repo.maven.apache.org).

Generated by Build Test Java for issue #1066

@github-actions
Copy link
Contributor

⚠️ Coverage Regression Detected

This PR decreases test coverage. Please add tests to maintain coverage levels.

Overall Coverage

Metric Base PR Delta
Lines 82.01% 82.06% 📈 +0.05%
Statements 81.99% 82.00% 📈 +0.01%
Functions 82.91% 82.50% 📉 -0.41%
Branches 74.37% 74.03% 📉 -0.34%
📁 Per-file Coverage Changes (2 files)
File Lines (Before → After) Statements (Before → After)
src/cli.ts 46.3% → 46.4% (+0.06%) 46.8% → 46.7% (-0.07%)
src/docker-manager.ts 83.1% → 83.7% (+0.56%) 82.4% → 83.0% (+0.54%)

Coverage comparison generated by scripts/ci/compare-coverage.ts

@github-actions
Copy link
Contributor

C++ Build Test Results

Project CMake Build Status
fmt PASS
json PASS

Overall: PASS

Generated by Build Test C++ for issue #1066

@github-actions
Copy link
Contributor

🦕 Deno Build Test Results

Project Tests Status
oak 1/1 ✅ PASS
std 1/1 ✅ PASS

Overall: ✅ PASS

Generated by Build Test Deno for issue #1066

curl -D /dev/stdout fails inside the agent container (exit code 23,
write error). Instead, verify rate limit behavior through the response
body (which contains rate_limit_error JSON with limit and retry_after
fields) rather than trying to capture HTTP headers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@Mossaka Mossaka force-pushed the feat/token-rate-limiting branch from 87337e0 to 2ac4b53 Compare February 27, 2026 00:39
@github-actions
Copy link
Contributor

✅ Coverage Check Passed

Overall Coverage

Metric Base PR Delta
Lines 82.03% 82.21% 📈 +0.18%
Statements 82.01% 82.19% 📈 +0.18%
Functions 82.50% 82.50% ➡️ +0.00%
Branches 74.20% 74.47% 📈 +0.27%
📁 Per-file Coverage Changes (2 files)
File Lines (Before → After) Statements (Before → After)
src/cli.ts 46.6% → 47.2% (+0.55%) 47.0% → 47.7% (+0.67%)
src/docker-manager.ts 83.1% → 83.7% (+0.56%) 82.4% → 83.0% (+0.54%)

Coverage comparison generated by scripts/ci/compare-coverage.ts

@github-actions
Copy link
Contributor

Deno Build Test Results

Project Tests Status
oak 1/1 ✅ PASS
std 1/1 ✅ PASS

Overall: ✅ PASS

Generated by Build Test Deno for issue #1066

@github-actions
Copy link
Contributor

Rust Build Test Results

Project Build Tests Status
fd 1/1 PASS
zoxide 1/1 PASS

Overall: ✅ PASS

Generated by Build Test Rust for issue #1066

@github-actions
Copy link
Contributor

C++ Build Test Results

Project CMake Build Status
fmt PASS
json PASS

Overall: PASS

Generated by Build Test C++ for issue #1066

@github-actions
Copy link
Contributor

Node.js Build Test Results

Project Install Tests Status
clsx ✅ All passed PASS
execa ✅ All passed PASS
p-limit ✅ All passed PASS

Overall: ✅ PASS

Generated by Build Test Node.js for issue #1066

@github-actions
Copy link
Contributor

Go Build Test Results

Project Download Tests Status
color PASS ✅ PASS
env PASS ✅ PASS
uuid PASS ✅ PASS

Overall: ✅ PASS

Generated by Build Test Go for issue #1066

@github-actions
Copy link
Contributor

Build Test: Bun ✅

Project Install Tests Status
elysia 1/1 PASS
hono 1/1 PASS

Overall: PASS

  • Bun version: 1.3.10
  • All tests passed successfully

Generated by Build Test Bun for issue #1066

@github-actions
Copy link
Contributor

Merged PRs: fix(deps): resolve high-severity rollup vulnerability in docs-site | fix(ci): recompile ci-doctor and add missing workflows
Tests: GitHub MCP ✅; safeinputs-gh ✅; Playwright ✅; Tavily ❌; file write ✅; bash cat ✅; discussion comment ✅; build ✅
Overall: FAIL

🔮 The oracle has spoken through Smoke Codex for issue #1066

@github-actions
Copy link
Contributor

Smoke Test Results

Test Status
GitHub MCP - #1069: fix(deps): resolve high-severity rollup vulnerability in docs-site
GitHub MCP - #1067: fix(ci): recompile ci-doctor and add missing workflows
Playwright - github.com title contains "GitHub"
File write + bash verify

Overall: PASS

💥 [THE END] — Illustrated by Smoke Claude for issue #1066

@github-actions
Copy link
Contributor

.NET Build Test Results

Project Restore Build Run Status
hello-world PASS
json-parse PASS

Overall: PASS

Run output

hello-world:

Hello, World!
```

**json-parse:**
```
{
  "Name": "AWF Test",
  "Version": 1,
  "Success": true
}
Name: AWF Test, Success: True

Generated by Build Test .NET for issue #1066

@github-actions
Copy link
Contributor

🤖 Smoke test results for @Mossaka:

✅ GitHub MCP — Last 2 merged PRs: #1069 "fix(deps): resolve high-severity rollup vulnerability in docs-site", #1067 "fix(ci): recompile ci-doctor and add missing workflows"
✅ Playwright — github.com title contains "GitHub"
✅ File write — /tmp/gh-aw/agent/smoke-test-copilot-22467568755.txt created
✅ Bash — file verified via cat

Overall: PASS

📰 BREAKING: Report filed by Smoke Copilot for issue #1066

@github-actions
Copy link
Contributor

Java Build Test Results

Project Compile Tests Status
gson 1/1 PASS
caffeine 1/1 PASS

Overall: PASS

Generated by Build Test Java for issue #1066

@github-actions
Copy link
Contributor

Chroot Version Comparison Results

Runtime Host Version Chroot Version Match?
Python Python 3.12.12 Python 3.12.3 ❌ NO
Node.js v24.13.1 v20.20.0 ❌ NO
Go go1.22.12 go1.22.12 ✅ YES

Result: ❌ Not all versions match — Python and Node.js versions differ between host and chroot environments.

Tested by Smoke Chroot for issue #1066

…ests

- npm audit fix for minimatch (GHSA-7r86-cg39-jmmj, GHSA-23c5-xmqv-rm74)
- Add 6 unit tests for TPM rate limit config (buildRateLimitConfig with
  rateLimitTpm, validation errors, validateRateLimitFlags with TPM)
- Improves CLI test coverage for the token rate limiting feature

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@Mossaka Mossaka force-pushed the feat/token-rate-limiting branch from 2ac4b53 to 20aa696 Compare February 27, 2026 01:40
@github-actions
Copy link
Contributor

✅ Coverage Check Passed

Overall Coverage

Metric Base PR Delta
Lines 82.03% 82.21% 📈 +0.18%
Statements 82.01% 82.19% 📈 +0.18%
Functions 82.50% 82.50% ➡️ +0.00%
Branches 74.20% 74.47% 📈 +0.27%
📁 Per-file Coverage Changes (2 files)
File Lines (Before → After) Statements (Before → After)
src/cli.ts 46.6% → 47.2% (+0.55%) 47.0% → 47.7% (+0.67%)
src/docker-manager.ts 83.1% → 83.7% (+0.56%) 82.4% → 83.0% (+0.54%)

Coverage comparison generated by scripts/ci/compare-coverage.ts

@github-actions
Copy link
Contributor

Deno Build Test Results

Project Tests Status
oak 1/1 ✅ PASS
std 1/1 ✅ PASS

Overall: ✅ PASS

Generated by Build Test Deno for issue #1066

@github-actions
Copy link
Contributor

🦀 Rust Build Test Results

Project Build Tests Status
fd 1/1 PASS
zoxide 1/1 PASS

Overall: ✅ PASS

Generated by Build Test Rust for issue #1066

@github-actions
Copy link
Contributor

Smoke Test Results

Test Status
GitHub MCP (last 2 merged PRs)
Playwright (github.com title check)
File write
Bash verify

Recent PRs: #1037 chore(deps): bump all-github-actions group, #1069 fix(deps): rollup vulnerability

Overall: PASS

💥 [THE END] — Illustrated by Smoke Claude for issue #1066

@github-actions
Copy link
Contributor

Build Test: Go ✅

Project Download Tests Status
color PASS PASS
env PASS PASS
uuid PASS PASS

Overall: PASS

Generated by Build Test Go for issue #1066

@github-actions
Copy link
Contributor

Build Test: Node.js Results

Project Install Tests Status
clsx PASS ✅ PASS
execa PASS ✅ PASS
p-limit PASS ✅ PASS

Overall: ✅ PASS

Generated by Build Test Node.js for issue #1066

@github-actions
Copy link
Contributor

.NET Build Test Results

Project Restore Build Run Status
hello-world PASS
json-parse PASS

Overall: PASS

Run output

hello-world:

Hello, World!
```

**json-parse:**
```
{
  "Name": "AWF Test",
  "Version": 1,
  "Success": true
}
Name: AWF Test, Success: True

Generated by Build Test .NET for issue #1066

@github-actions
Copy link
Contributor

Build Test: Bun ✅

Project Install Tests Status
elysia 1/1 PASS
hono 1/1 PASS

Overall: PASS

  • Bun version: 1.3.10
  • Both projects installed cleanly with no dependencies
  • All tests passed successfully

Generated by Build Test Bun for issue #1066

@github-actions
Copy link
Contributor

Smoke test results for run 22469109420:

✅ GitHub MCP — Last 2 merged PRs: #1069 fix(deps): resolve high-severity rollup vulnerability in docs-site, #1067 fix(ci): recompile ci-doctor and add missing workflows
✅ Playwright — https://github.com title contains "GitHub"
✅ File write — /tmp/gh-aw/agent/smoke-test-copilot-22469109420.txt created
✅ Bash — file verified via cat

Overall: PASS | PR by @Mossaka

📰 BREAKING: Report filed by Smoke Copilot for issue #1066

@github-actions
Copy link
Contributor

C++ Build Test Results

Project CMake Build Status
fmt PASS
json PASS

Overall: PASS 🎉

Generated by Build Test C++ for issue #1066

@github-actions
Copy link
Contributor

Smoke test results
GitHub MCP merged PRs: "fix(deps): resolve high-severity rollup vulnerability in docs-site"; "fix(ci): recompile ci-doctor and add missing workflows" ✅
Safeinputs-gh PR list: "fix: add explicit execute directive to smoke-codex to prevent noop"; "chore(deps): bump the all-github-actions group across 1 directory with 15 updates" ✅
Playwright title contains "GitHub" ✅
Tavily web search ❌ (Tavily MCP tool unavailable)
File write + cat verify ✅
Discussion comment added ✅
Build npm ci && npm run build
Overall: FAIL

🔮 The oracle has spoken through Smoke Codex for issue #1066

@github-actions
Copy link
Contributor

Java Build Test Results

Project Compile Tests Status
gson 1/1 PASS
caffeine 1/1 PASS

Overall: PASS

Generated by Build Test Java for issue #1066

@github-actions
Copy link
Contributor

Chroot Version Comparison Results

Runtime Host Version Chroot Version Match?
Python Python 3.12.12 Python 3.12.3 ❌ NO
Node.js v24.13.1 v20.20.0 ❌ NO
Go go1.22.12 go1.22.12 ✅ YES

Result: ❌ Not all tests passed — Python and Node.js versions differ between host and chroot environments.

Tested by Smoke Chroot for issue #1066

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants